﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.SharePoint.WebControls;

namespace ZhukBlogSharePointProject
{
    /// <summary>
    /// Репозиторий для работы с нашими объектами
    /// </summary>
    public class FakeDataRepository
    {
        /// <summary>
        /// Получение объекта по его ID
        /// </summary>
        /// <param name="id">Id объекта</param>
        /// <returns></returns>
        public FakeDataObject GetObject(int id)
        {
            var query = GetAllObjects();
            query = query.Where(o => o.Id == id);
            return query.FirstOrDefault();
        }

        /// <summary>
        /// Поиск объектов
        /// </summary>
        /// <param name="search">Строка поиска</param>
        /// <returns></returns>
        public IEnumerable<FakeDataObject> GetObjects(string search)
        {
            var query = GetAllObjects();
            query = query.Where(q => q.Title.Contains(search) || q.Description.Contains(search));
            return query.ToList();
        }

        /// <summary>
        /// Возвращаем коллекцию объектов для имитации их получения из какого-либо источника данных.
        /// Таким источником может быть как SharePoint, так и любой другой.
        /// </summary>
        /// <returns></returns>
        private IEnumerable<FakeDataObject> GetAllObjects()
        {
            var res = new List<FakeDataObject>
                          {
                              new FakeDataObject
                                  {
                                      Id = 1,
                                      Title = "Иван",
                                      Description = "Иван был первым",
                                      Date = DateTime.Today.AddDays(-1000)
                                  },
                              new FakeDataObject
                                  {
                                      Id = 2,
                                      Title = "Петр",
                                      Description = "Петр был вторым",
                                      Date = DateTime.Today.AddDays(-900)
                                  },
                              new FakeDataObject
                                  {
                                      Id = 3,
                                      Title = "Сергей",
                                      Description = "Сергей был перед Дмитрием",
                                      Date = DateTime.Today.AddDays(-800)
                                  },
                              new FakeDataObject
                                  {
                                      Id = 4,
                                      Title = "Дмитрий",
                                      Description = "Дмитрий был после Сергея",
                                      Date = DateTime.Today.AddDays(-700)
                                  },
                              new FakeDataObject
                                  {
                                      Id = 5,
                                      Title = "Антон",
                                      Description = "Антон был последним",
                                      Date = DateTime.Today.AddDays(-600)
                                  }
                          };
            return res;
        }
    }

    /// <summary>
    /// Наш "объект"
    /// </summary>
    public class FakeDataObject
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public DateTime Date { get; set; }

        internal PickerEntity ToPickerEntity()
        {
            return new PickerEntity
                       {
                           DisplayText = Title,
                           Key = Id.ToString(),
                           Description = Description
                       };
        }
    }
}
